package com.example.image

import android.content.res.Resources
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Matrix
import java.io.ByteArrayOutputStream

//
//Bitmap图片处理工具
object BitmapUtil {

    //方式一 质量压缩
    fun compressQuality(res:Resources,resId:Int,quality:Int):Bitmap{
        var bm=BitmapFactory.decodeResource(res,resId)//
        var bos = ByteArrayOutputStream()
        bm.compress(Bitmap.CompressFormat.JPEG,100,bos)//把这个文件压缩到流里面
        var bytes = bos.toByteArray()
        return BitmapFactory.decodeByteArray(bytes,quality,bytes.size)
    }
    //方式二 缩放压缩
    fun compressScale(res:Resources,resId:Int,targetWidth:Int,targetHeight:Int):Bitmap{
        var bm = BitmapFactory.decodeResource(res,resId)

        return Bitmap.createScaledBitmap(bm,targetWidth,targetHeight,true)
    }
    //方式三 矩阵压缩  //矩阵时由多个像素点构成的
    fun compressMatrix(res:Resources,resId:Int,sx:Float,sy:Float):Bitmap{
        var matrix = Matrix()
        matrix.setScale(sx,sy)
        var bm = BitmapFactory.decodeResource(res,resId)

        return Bitmap.createBitmap(bm,0,0,bm.width,bm.height,matrix,true)
        //就是把一个大的矩阵，转换成一个小的矩阵，其中,sx,sy就是右下角,0,0时左上角
        // var bm = BitmapFactory.decodeResource(res,resId)拿到像素图
    }

    //方法四,使用编码格式:RGB_565,RGB265,ARGB_8888,RGB_444
    fun compressRgb(res:Resources,resId:Int):Bitmap{
        var options = BitmapFactory.Options()
        options.inPreferredConfig=Bitmap.Config.RGB_565

        return BitmapFactory.decodeResource(res,resId,options)
    }
    //方式五,二次采样压缩
    fun compressSecondSample(res:Resources,resId:Int,maxWidth:Int,maxHeight:Int):Bitmap{

        //第一次加载,只读取图标的宽和高，不加载像素值
        var options = BitmapFactory.Options()
        options.inJustDecodeBounds=true//确保只加载图片的宽和高
        BitmapFactory.decodeResource(res,resId,options)
        //获取图片的宽和高
        var originWidth =options.outWidth
        var originHeight =options.outHeight
        //第二次计算采样率
        var sampleSize = 1

        while (originWidth>maxWidth || originHeight>maxHeight){

            sampleSize*=2//每循环一次就减少一半
            originWidth/=sampleSize
            originHeight/=sampleSize

        }
        options.inJustDecodeBounds = false //关闭掉,加载图片加载像素值
        options.inSampleSize=sampleSize//设置采样率大小
        options.inPreferredConfig = Bitmap.Config.RGB_565//设置图片加载格式


        return BitmapFactory.decodeResource(res,resId,options)
    }




}